型システム
プログラムの振る舞いを[* 型]を用いて近似し、[* 静的に]安全性を保証する仕組み。型なし、単相型、一階多相、n階多相、線形型、型関数、依存型など、強力な型があればあるほど静的に安全性を保証できる範囲が広がる一方、型の不一致が起きてないかどうかの計算が複雑になり、型が正しいかどうかの証明を与える必要があるなどのトレードオフがある。
function f(v : number | null) {
if (v !== null) {
// この中ではなんとvの型はnumberとして扱われる
......
} else {
// この中ではなんとvの型はnullとして扱われる
}
}